#!/usr/bin/env python
# -*- coding:utf-8 -*-

#1.为函数写一个装饰器，在函数执行之后输入 after
'''
def wrapper(func):
    def inner(*args,**kwargs):
        v=func()
        print('after')
        return v
    return inner

@wrapper
def func():
    print(123)

func()
'''
#2.为函数写一个装饰器，把函数的返回值 +100 然后再返回。
'''
def wrapper(func):
    def inner():
        v=func()
        return v+100
    return inner


@wrapper
def func():
    return 7

result = func()
print(result)
'''
#3.为函数写一个装饰器，根据参数不同做不同操作。

# flag为True，则 让原函数执行后返回值加100，并返回。
# flag为False，则 让原函数执行后返回值减100，并返回。
'''
def x(flag):
    def wrapper(func):
        def inner(*args,**kwargs):
            if flag==True:
                v = func(*args,**kwargs)
                return v+100
            else:
                v=func(*args,**kwargs)
                return v-100
        return inner
    return wrapper

@x(True)
def f1():
    return 11

@x(False)
def f2():
    return 22

r1 = f1()
r2 = f2()
print(r1,r2)

'''
#4.写一个脚本，接收两个参数。
#
# 第一个参数：文件
# 第二个参数：内容
# 请将第二个参数中的内容写入到 文件（第一个参数）中。

# 执行脚本： python test.py oldboy.txt 你好
'''
import sys
# D:\cood\day14\oldboy.txt
# C:\Python37\python3.exe F:\homework\s21day14\python test.py F:\homework\s21day14\oldboy.txt
# sys.argv = [F:\homework\s21day14\python test.py,F:\homework\s21day14\oldboy.txt,'你好’]
sys.argv=[D:\cood\day14\python test.py,D:\cood\day14\oldboy.txt,'你好']
path = sys.argv[1]
date = sys.argv[2]
with open(path,mode='w',encoding='utf-8') as f:
    f.write(date)
'''


# with open('oldboy.txt',mode='rb')as f1 ,open('python test.py',mode='wb')as f2:
#     chunk = f1.read()
#     f2.write(chunk)

#5.递归的最大次数是多少？
# 1000

#6.看代码写结果
'''
print("你\n好")  #你（换行）好
print("你\\n好") #你\n好
print(r"你\n好") #你\n好
'''

#7.写函数实现，查看一个路径下所有的文件【所有】。
'''
import os
result = os.walk(r'D:/cood/day14')

for a,b,c in result:
    for item in c:
        path=os.path.join(a,item)
        print(path)
'''
#8.写代码

path = r'D:/cood/day14'

# 请根据path找到code目录下所有的文件【单层】，并打印出来。
'''
import os
result = os.listdir(path)
for i in result:
    print(i)
'''

# 9.写代码实现【题目1】和【题目2】
# 【题目1】斐波那契数列1,1,2,3,5,8,13,21......根据这样的规律，
# 编程求出400万以内最大的斐波那契数，并求出它是第几个斐波那契数
'''
num1 = 0
num2 = 1
count = 0
while num2 < 4000000:
    num1,num2 = num2,num1+num2
    count += 1
print(num1,count)
'''
'''

def fun(a,b,c):
    # v = b   b += a   a = v
    a,b = b,a+b
    c += 1
    if b > 4000000:
        print(a,c)
        return
    fun(a,b,c)
fun(1,1,1)
'''

# 【题目2】上机编程实现以下功能：
dicta = {'a':1,'b':2,'c':3,'d':4,'f':'hello','z':'w'}
dictb = {'b':3,'d':5,'e':7,'m':9,'k':'world','z':'o'}
# 要求写一段代码，实现两个字典的相加，不同的key对应的值保留，相同的key对应的值相加后保留，
# 如果是字符串就拼接，如上示例得到的结果为：
# dictc = {'a':1,'b':5,'c':3,'d':9,'e':7,'m':9,'f':'hello','k':'world'}
'''
dictc={}
for v,k in dicta.items():
    if v in dictb:
        dictb[v]=k+dictb[v]
    else:
        dictb[v]=k
dictc=dictb
print(dictc)
'''


# 10.看代码写结果
# def extendList(val,list=[]):
#     list.append(val)
#     return list
# list1 = extendList(10)
# list2 = extendList(123,[])
# list3 = extendList('a')
# print(list1,list2,list3)
'''
[10,'a']   [123]   [10,'a'] 
'''

#11实现如下面试题：
#2.
'''
tupleA=('a','b','c','d','e')
tupleB=(1,2,3,4,5)
res1={}
for i in tupleA:
    for j in tupleB:
        res1[i]=j
print(res1)
'''
'''

tupleA=('a','b','c','d','e')
tupleB=(1,2,3,4,5)
res = {tupleA[i]:tupleB[i] for i in range(len(tupleB))}
print(res)
'''
#3python代码获取命令行参数：
'''
import sys
sys.argv[1]  第二个开始是第一个参数
'''
#4.已知 ip='192.168.0.100'代码实现提取ip的各部分并写入列表
'''
ip='192.168.0.100'
v=ip.split('.')
print(v)
'''
#5
'''
AList=['a','b','c','d']

v = ','.join(AList)
print(v)
'''
#6
'''
stra = '123456FASKKSJJLSKWLM<SJKL90'
print(stra[-2 :])
print(stra[1:3])
'''
#编程题
#1.编写一个函数,以文件夹名为参数,显示文件夹中文件的路径,及其其中包含的文件夹中文件的路径


# def func(filen):
#     import os
#     for filepath,pathlist,filenam in os.walk(filen):
#         for file in filenam:
#             res=os.path.join(filepath+file)
#             print(res)
#
# func('D:/cood/day14')


# def func(file):
#     import os
#     v= os.walk(file)
#     for filepath,filelist,filename in v:
#         for i in filename :
#             res=os.path.join(filepath+i)
#             print(res)
# func('D:/cood/day14')

#2 求1000以内的完美数
# 2 求1000以内的完美数

# for i in range(1, 1001):
#     list1 = []
#     for j in range(1, i):
#         if i % j == 0:
#             list1.append(j)
#     if sum(list1) == i:
#         print(list1)
#         print(i)



# 3.
# 有A.txt和B.txt两个文件,使用多进程的进程池方式分别读取这两个文件




# 4.输入两个列表,alist,blist,依次比较两个list中的元素,
# 如果alist的元素大于blist的元素,返回alist;
# 如果alist的元素小于blist的元素,返回blist;
# 如果两个list的元素都相等,返回alist,否则返回blist
'''
alist=[14,56,89,85]
blist=[5,6,78,9,85]
clist=[]
for i in range(len(alist)):
    if alist[i]>=blist[i]:
        clist.append(alist[i])
    elif alist[i]<blist[i]:
        clist.append(blist[i])
print(clist)
'''
# 5.一个大小为100G的文件etl_log.txt,要读取文件中的内容,写出具体过程的代码.
# with open('log.txt',mode='r',encoding='utf8') as f:
#     for i in f:
#         print(i)
